home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Special 25 / AMIGAplus Sonderheft 25 (2000)(Falke)(DE)(Track 1 of 4)[!].iso / Updates / HD-Installer / jst_dev / sources / src / loaders / Immortal / immortalhd.asm < prev    next >
Assembly Source File  |  2000-04-12  |  3KB  |  198 lines

  1. ; *** Written by Jean-François Fabre
  2.  
  3.  
  4.     include    "jst.i"
  5.  
  6.     HD_PARAMS    "immortal.d",STD_DISK_SIZE,2    ; JST loader parameters
  7.     SET_VARZONE    startvar,endvar            ; snapshot saved variables
  8.  
  9. loader:
  10.     RELOC_MOVEL    D0,trainer
  11.  
  12.     move.l    #$80000,D0
  13.     JSRABS    AllocExtMem
  14.     RELOC_MOVEL    D0,ExtBase
  15.     beq    MemErr
  16.  
  17.     Mac_printf    "Immortal HD Loader V1.1a"
  18.     Mac_printf    "Coded by Jean-François Fabre © 1998"
  19.  
  20.     RELOC_TSTL    trainer
  21.     beq    skip$
  22.  
  23.     NEWLINE
  24.     Mac_printf    "Trainer activated"
  25. skip$
  26.     JSRABS    LoadDisks
  27.  
  28.     moveq.l    #0,D0
  29.     move.l    #CACRF_CopyBack,D1
  30.     JSRABS    Degrade
  31.  
  32. ;    WAIT_LMB
  33.  
  34.     GO_SUPERVISOR
  35.     SAVE_OSDATA    $80000
  36.  
  37.     JSRGEN    FreezeAll
  38.     move    #$2700,SR
  39.  
  40.     lea    $DFF000,A6
  41.     MOVE    #$7FFF,154(A6)        ;0EC: 3D7C7FFF009A
  42.     MOVE    #$7FFF,156(A6)        ;0F2: 3D7C7FFF009C
  43.     MOVE    #$8640,150(A6)        ;0F8: 3D7C86400096
  44.  
  45.     bsr    InstallBoot
  46.  
  47.     sub.l    A0,A0
  48.     sub.l    A1,A1
  49.  
  50.     ; **** boot stuff and patch
  51.  
  52.     JSRGEN    FlushCachesHard
  53.  
  54.     move.l    ExtBase(pc),D0
  55.     jmp    $10000
  56.     
  57.  
  58. PatchLoader1:
  59.     PATCHUSRJMP    $5A5C.W,ReadSectors
  60.     move.w    #$4E75,$620A.W
  61.  
  62.     PATCHUSRJSR    $26970,KbInt
  63.  
  64.     PATCHUSRJSR    $26990,Delay
  65.     move.w    #$4E71,$2698E
  66.  
  67.     PATCHUSRJSR    $2462A,WaitD6
  68.     PATCHUSRJSR    $24642,WaitD6
  69.     PATCHUSRJSR    $2465A,WaitD6
  70.  
  71.     PATCHUSRJMP    $D6.W,StoreCop
  72.     move.l    #$4EB800D6,$24754
  73.  
  74.     JSRGEN    FlushCachesHard
  75.     add.l    #$145F6,A0
  76.     nop
  77.     nop
  78.     jmp    (A0)
  79.     nop
  80.     nop
  81.  
  82. StoreCop:
  83.     move.l    A1,$DFF080
  84.     move.l    A1,$E0
  85.     move.l    D0,-(A7)
  86.     move.l    A1,D0
  87.     JSRGEN    StoreCopperPointer
  88.     move.l    (A7)+,D0
  89.     rts
  90.  
  91. WaitD6:
  92.     move.l    D0,-(sp)
  93.     moveq    #0,D0
  94.     move.w    D6,D0
  95.     divu.w    #$30,D0
  96.     swap    D0
  97.     clr.w    D0
  98.     swap    D0
  99.     BEAM_DELAY    D0
  100.     move.l    (sp)+,D0
  101.     rts
  102.  
  103. InstallBoot:
  104.     moveq    #0,D0
  105.     move.l    #$20000,D1
  106.     move.l    #$A2C00,D2
  107.     lea    $10000,A0
  108.     JSRGEN    ReadDiskPart
  109.  
  110.     PATCHUSRJMP    $11348,PatchLoader1
  111.  
  112.     move.w    #$6006,$11322    ; remove a poke in ROM ????
  113.     rts
  114.  
  115. ReadSectors:
  116.     movem.l    A0/D0-D2,-(a7)
  117.     and.w    #$FFFF,D1
  118.     and.w    #$FFFF,D2
  119.  
  120.     moveq    #0,D0
  121.     cmp.w    #2,D1
  122.     bne.b    load$
  123.     cmp.w    #2,D2
  124.     bne.b    load$
  125.     move.l    diskcount(pc),D0
  126.     cmp.l    #2,D0
  127.     beq    load$
  128.     RELOC_ADDL    #1,diskcount
  129.  
  130.     ; remove the protection
  131.  
  132.     move.b    #$22,$101C5
  133.     move.b    #$04,$1043C
  134.     move.w    #$0B38,$1F770
  135.  
  136. load$
  137.     move.l    diskcount(pc),D0
  138.     cmp.l    #2,D0
  139.     beq    disk2$
  140.     moveq    #0,D0
  141.     bra.b    call$
  142. disk2$
  143.     moveq.l    #1,D0
  144.  
  145. call$
  146.     cmp.w    #$370,D1
  147.     bcs    read$        ; normal if D1 below $370
  148.     add.l    #22,D1        ; skips 2 tracks if D1 above $370
  149. read$
  150.     JSRGEN    ReadRobSectors
  151.     movem.l    (a7)+,A0/D0-D2
  152.     moveq    #0,D0
  153.     rts
  154.  
  155. KbInt:
  156.     move.b    $BFEC01,D0
  157.     move.l    D0,-(A7)
  158.     ror.b    #1,D0
  159.     not.b    D0
  160.     cmp.b    #$59,D0        ; F10
  161.     bne    noquit$
  162.     JSRGEN    InGameExit
  163. noquit$
  164.     cmp.b    #$42,D0        ; TAB key
  165.     bne    noicon$
  166.     JSRGEN    InGameIconify
  167.     move.w    #$4200,$DFF100    ; set proper bpl control ( HRTMon does not restore
  168.                 ; the display right unless you type e $100 $4200 )
  169.     move.w    ($DFF088),D0    ; reactivate
  170. noicon$
  171.     move.l    (a7)+,D0
  172.     rts
  173.  
  174. Delay:
  175.     move.l    D0,-(sp)
  176.     move.w    #$12C,D0
  177.     divu.w    #$28,D0
  178.     swap    D0
  179.     clr.w    D0
  180.     swap    D0
  181.     JSRGEN    BeamDelay
  182.     move.l    (sp)+,D0
  183.     rts
  184.     
  185. MemErr:
  186.     Mac_printf    "** Not enough memory to run Immortal!"
  187.     JMPABS    CloseAll
  188.  
  189. startvar:
  190. diskcount:
  191.     dc.l    0    ; this variable is saved by JST snapshot
  192. endvar:
  193.  
  194. trainer:
  195.     dc.l    0
  196. ExtBase:
  197.     dc.l    0
  198.